      subroutine modelo2d(X)

      use globais
      implicit none
      

      double precision :: X(n)
      integer :: ndonoh
      integer :: i,j
!       double precision, dimension(:,:), allocatable :: caux
      integer :: nxaux,nzaux


      double precision :: x0,z0,xdonoh,zdonoh,deltax,deltaz
      integer :: i0,j0,ndaincog,cont,ipml,jpml

      double precision :: mapXemC
  
      double precision :: aux

!velocidade de propagacao no ar = 340m/s
!velocidade de propagacao na agua = 1450m/s
!massa especifica da agua = 1000

! passa os valores dos parametros para o grid do modelo de velocidades
! (operacao auxiliar para facilitar interpolacao)



      do j=1,Nz0
	  do i=1,Nx0
	      ndonoh = (j-1)*Nx0+i
	      !mapeamento de constrained minimization em unconstrained
	      c0(i,j) = mapXemC(X(ndonoh),cmin,cmax)
	  enddo
      enddo



!       write(*,*)'                           C0 --- '
!       write(*,*)'                         ',C0



      call interpola(c,nx,nz,c0,nx0,nz0,sizedep,depX,1)

      
! prolonga as propriedades do limite do dominio para as camadas de absorcao
      do j=1,Nz-(Npml-1)
	  do i=1,Npml-1
      	      c(i,j) = c(Npml,j)
	  enddo

	  do i=Nx,Nx - Npml+1,-1
      	      c(i,j) = c(Nx - Npml +1 ,j)
	  enddo

      enddo

      do j=Nz-Npml+1,Nz
	  do i=1,Nx
      	      c(i,j) = c(i,Nz-Npml)
	  enddo
      enddo



!  por enquanto constante
      do j=1,Nz
	  do i=1,Nx
	      rho(i,j) = rhocte
	  enddo
      enddo




      ! buoyancy e bulk modulus no grid
      do i=1,Nx
	  do j=1,Nz
	      b(i,j) = 1.0/rho(i,j)
	      K(i,j) = rho(i,j)*c(i,j)**2	  
	  enddo
      enddo






      return
      end subroutine modelo2d